'''
第一步，进行数据探索
'''

import numpy as np
import pandas as pd 
import seaborn as sb 
import matplotlib.pyplot as plt 

def display_info(train):
    # 设置pandas显示所有行和列
    pd.set_option('display.max_columns', None)
    pd.set_option('display.max_rows', None)
    # 显示前5列数据
    print(train.head())
    # 显示所有列详细信息
    print('Train: ', train.shape)
    print(train.info())

    print(train.describe())
    '''
    根据我们数据的具体物理含义，我们可以有理由推断0代表无效值或者缺失值
    在后面进行数据特征的时候，可以将0值标注为缺失值
    '''
    # 统计值为0的数据
    Nan_colomns = ['Plasma_glucose_concentration', 'blood_pressure', 'Triceps_skin_fold_thickness', 'serum_insulin', 'BMI']
    print((train[Nan_colomns] == 0).sum())
    '''
    根据结果显示，Plasma_glucose_concentration, blood_pressure, BMI这三列数据缺失较少，我们可以采用平均值填充
    而Triceps_skin_fold_thickness, serum_insulin缺失较多，需要采用其他的填充策略
    '''

def feature_distribution(train):
    feature_columns = train.columns
    for feature in feature_columns:
        # 特征的分布
        sb.distplot(train[feature], kde=False)
        plt.show()
        # 特征与target之间的关系
        if feature is not 'Target':
            sb.countplot(x=feature, hue='Target', data=train)
            plt.show()

def features_correlation(train):
    data_corr = train.corr().abs()
    plt.subplots(figsize=(9,7))
    sb.heatmap(data_corr, annot=True)
    plt.show()



if __name__ == '__main__':
    train = pd.read_csv('pima-indians-diabetes.csv')
    # 查看数据中特征的综合信息
    display_info(train)
    # 查看各个特征的分布
    feature_distribution(train)
    # 特征之间的关系
    features_correlation(train) # 可以发现只有年龄和怀孕次数相关系数大于0.5，其他特征相关性并不大